/**
 * uiStateService.js
 * 提供医学影像查看器的UI状态管理功能
 * 从ViewerPage.vue中提取，专注于面板管理、信息显示等UI状态
 */

// 缓存UI状态的对象
const uiState = {
  // 面板状态
  aiPanelCollapsed: false,
  seriesPanelCollapsed: false,
  // 展开的检查
  expandedStudies: {},
  // 信息显示状态
  showPatientInfo: false,
  showZoomInfo: false,
  showWwwcInfo: false
};

// 超时处理
let zoomInfoTimeout = null;
let wwwcInfoTimeout = null;

/**
 * 切换AI面板折叠状态
 * @returns {boolean} 新的折叠状态
 */
export function toggleAiPanel() {
  uiState.aiPanelCollapsed = !uiState.aiPanelCollapsed;
  return uiState.aiPanelCollapsed;
}

/**
 * 切换序列面板折叠状态
 * @returns {boolean} 新的折叠状态
 */
export function toggleSeriesPanel() {
  uiState.seriesPanelCollapsed = !uiState.seriesPanelCollapsed;
  return uiState.seriesPanelCollapsed;
}

/**
 * 切换患者信息显示状态
 * @returns {boolean} 新的显示状态
 */
export function togglePatientInfo() {
  uiState.showPatientInfo = !uiState.showPatientInfo;
  return uiState.showPatientInfo;
}

/**
 * 切换检查的展开状态
 * @param {string} studyId - 检查ID
 * @param {string} activeStudyId - 当前活动检查ID
 * @returns {Object} 包含更新后状态和操作指示的对象
 */
export function toggleStudy(studyId, activeStudyId) {
  // 检查是否需要激活
  const shouldActivate = activeStudyId !== studyId;
  
  // 如果不需要激活，只是切换展开状态
  if (!shouldActivate) {
    uiState.expandedStudies[studyId] = !uiState.expandedStudies[studyId];
    return {
      expanded: uiState.expandedStudies[studyId],
      shouldActivate: false,
      studyId
    };
  }
  
  // 如果需要激活，则展开此检查
  uiState.expandedStudies[studyId] = true;
  return {
    expanded: true,
    shouldActivate: true,
    studyId
  };
}

/**
 * 显示缩放信息，并在指定时间后自动隐藏
 * @param {number} duration - 显示持续时间（毫秒）
 * @returns {boolean} 显示状态
 */
export function showZoomInfoTemporary(duration = 2000) {
  // 清除之前的定时器
  if (zoomInfoTimeout) {
    clearTimeout(zoomInfoTimeout);
  }
  
  // 显示缩放信息
  uiState.showZoomInfo = true;
  
  // 设置定时器在指定时间后隐藏
  zoomInfoTimeout = setTimeout(() => {
    uiState.showZoomInfo = false;
  }, duration);
  
  return uiState.showZoomInfo;
}

/**
 * 显示窗宽窗位信息，并在指定时间后自动隐藏
 * @param {number} duration - 显示持续时间（毫秒）
 * @returns {boolean} 显示状态
 */
export function showWwwcInfoTemporary(duration = 2000) {
  // 清除之前的定时器
  if (wwwcInfoTimeout) {
    clearTimeout(wwwcInfoTimeout);
  }
  
  // 显示窗宽窗位信息
  uiState.showWwwcInfo = true;
  
  // 设置定时器在指定时间后隐藏
  wwwcInfoTimeout = setTimeout(() => {
    uiState.showWwwcInfo = false;
  }, duration);
  
  return uiState.showWwwcInfo;
}

/**
 * 获取滑块位置样式
 * @param {boolean} aiPanelCollapsed - AI面板是否折叠
 * @returns {Object} 滑块位置样式
 */
export function getSliderPositionStyle(aiPanelCollapsed) {
  return {
    position: 'absolute',
    right: aiPanelCollapsed ? '35px' : '305px', // 紧贴AI面板左侧
    top: '50%',
    transform: 'translateY(-50%)',
    zIndex: '990' // 确保在AI面板下方，但在其他元素上方
  };
}

/**
 * 格式化出生日期
 * @param {string} birthDate - 原始出生日期字符串
 * @returns {string} 格式化后的出生日期
 */
export function formatBirthDate(birthDate) {
  if (!birthDate || birthDate === 'Unknown') return '';
  
  // 格式化日期，例如从 "19800101" 转换为 "1980-01-01"
  if (birthDate.length === 8) {
    return `${birthDate.substring(0, 4)}-${birthDate.substring(4, 6)}-${birthDate.substring(6, 8)}`;
  }
  
  return birthDate;
}

/**
 * 清理所有定时器
 */
export function cleanupTimers() {
  if (zoomInfoTimeout) {
    clearTimeout(zoomInfoTimeout);
    zoomInfoTimeout = null;
  }
  
  if (wwwcInfoTimeout) {
    clearTimeout(wwwcInfoTimeout);
    wwwcInfoTimeout = null;
  }
}

/**
 * 获取当前UI状态
 * @returns {Object} 当前UI状态对象
 */
export function getUIState() {
  return { ...uiState };
}

export default {
  toggleAiPanel,
  toggleSeriesPanel,
  togglePatientInfo,
  toggleStudy,
  showZoomInfoTemporary,
  showWwwcInfoTemporary,
  getSliderPositionStyle,
  formatBirthDate,
  cleanupTimers,
  getUIState
} 